package com.mysteel.seckill;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * spring boot整合sentinel进行限流，熔断降级
 *  1、引入sentinel依赖：spring-cloud-starter-alibaba-sentinel
 *  2、现在sentinel控制台
 *  3、在应用内配置sentinel控制台地址及应用与sentinel控制台通信端口：spring.cloud.sentinel.transport.dashboard=localhost:8790
 *  4、在控制台调整参数【默认所有的流控配置都保存在内存中，重启之后失效】
 *
 * 使用sentinel来保护feign远程调用，熔断：
 *  1、开启远程调用方法熔断保护：feign.sentinel.enable=true
 *  2、调用方手动指定远程调用服务的降级策略，远程服务被降级，触发自定义的熔断回调方法
 *  3、超大流量的时候，必须要牺牲一些远程服务，可以在服务提供方指定降级策略：提供方在运行，但是不运行自己的业务逻辑，返回的是默认的熔断数据
 */
@EnableRedisHttpSession
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class SeckillApplication {

    public static void main(String[] args) {
        SpringApplication.run(SeckillApplication.class, args);
    }

}
